package br.com.online.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import br.com.online.modelo.Funcionario;

public class FuncionarioDao {
	
	private final Session session;

	public FuncionarioDao(Session session) {
		this.session = session;
	}

	public void salva(Funcionario funcionario) {

		Transaction tx = session.beginTransaction();
		session.save(funcionario);
		tx.commit();
	}
	
	@SuppressWarnings("unchecked")
	public List<Funcionario> listaTudo() {
		return this.session.createCriteria(Funcionario.class).list();
	}

	public Funcionario carrega(Long id) {
		return (Funcionario) this.session.load(Funcionario.class, id);
	}

	public void atualiza(Funcionario funcionario) {
		Transaction tx = session.beginTransaction();
		session.update(funcionario);
		tx.commit();
	}

	public void remove(Funcionario funcionario) {
		Transaction tx = session.beginTransaction();
		session.delete(funcionario);
		tx.commit();
	}

	@SuppressWarnings("unchecked")
	public List<Funcionario> busca(String nome) {
		return session.createCriteria(Funcionario.class)
				.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE))
				.list();
	}

	public void recarrega(Funcionario funcionario) {
		session.refresh(funcionario);
	}

}
